package com.jinmdz.fmis.api.admin.controller;

import com.jinmdz.fmis.api.admin.model.goodsservice.*;
import com.jinmdz.fmis.api.admin.service.GoodsServiceService;
import com.jinmdz.fmis.api.api.model.common.IdData;
import com.jinmdz.fmis.api.api.model.common.IdVersionData;
import com.jinmdz.fmis.api.base.BaseController;
import com.jinmdz.fmis.core.base.BaseResult;
import com.jinmdz.fmis.core.model.SearchLoadData;
import com.jinmdz.fmis.dao.admin.model.goodsservice.GoodsServiceListItem;
import com.jinmdz.fmis.dao.admin.model.goodsservice.GoodsServiceTypeListItem;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.ArrayList;

/**
 * 物品、服务收费项目相关接口
 *
 * @author GuanKui
 * @date 2020/3/9 15:02
 */
@Api(description = "物品、服务收费项目相关接口")
@RestController()
@RequestMapping("/admin/goods-service")
public class GoodsServiceController extends BaseController {

    @Resource
    private GoodsServiceService goodsServiceService;

    /**
     * 加载物品、服务类型基本信息
     *
     * @param
     * @return
     * @author GuanKui
     * @date 2020/3/9  15:05
     */
    @ApiOperation(value = "加载物品、服务类型基本信息", notes = "加载物品服务分类【service_type】表中所有有效分类")
    @PostMapping("/load-goods-service-type-list")
    public BaseResult<ArrayList<GoodsServiceTypeListItem>> loadGoodsServiceTypeList() {
        return resultHandler(userItem -> goodsServiceService.loadGoodsServiceTypeList());
    }

    /**
     * 根据类型id加载物品、服务类型基本信息
     *
     * @param data 主键
     * @return
     * @author GuanKui
     * @date 2020/3/10 8:54
     */
    @ApiOperation(value = "根据类型id加载物品、服务类型基本信息", notes = "根据【service_type】表中记录id，加载指定的物品服务分类数据。")
    @PostMapping("/load-goods-service-type-with-id")
    public BaseResult<GoodsServiceTypeSaveData> loadGoodsServiceTypeWithId(@RequestBody IdData data) {
        return resultHandler(data, userItem -> goodsServiceService.loadGoodsServiceTypeWithId(data));
    }

    /**
     * 保存物品、服务类型基本信息
     *
     * @param data 保存物品服务类型
     * @return
     * @author GuanKui
     * @date 2020/3/9  15:05
     */
    @ApiOperation(value = "保存物品、服务类型基本信息", notes = "保存物品服务分类信息到表【service_type】中")
    @PostMapping("/save-goods-service-type")
    public BaseResult saveGoodsServiceType(@RequestBody GoodsServiceTypeSaveData data) {
        return resultHandler(data, userItem -> goodsServiceService.saveGoodsServiceType(userItem, data));
    }


    /**
     * 删除物品、服务类型基本信息
     *
     * @param data 主键和数据版本
     * @return
     * @author GuanKui
     * @date 2020/3/9  15:05
     */
    @ApiOperation(value = "删除物品、服务类型基本信息", notes = "从表【service_type】中删除物品服务分类信息")
    @PostMapping("/delete-goods-service-type-with-id")
    public BaseResult deleteGoodsServiceTypeWithId(@RequestBody ArrayList<IdVersionData> data) {
        return resultHandler(data, userItem -> goodsServiceService.deleteGoodsServiceTypeWithId(userItem, data));
    }

    /**
     * 根据类型加载物品、服务类型基本信息
     *
     * @param data 项目类型
     * @return
     * @author GuanKui
     * @date 2020/3/9  17:42
     */
    @ApiOperation(value = "加载物品、服务类型基本信息", notes = "加载不是任务包的物品、服务信息，包括id、名称、数量、价格信息")
    @PostMapping("/load-goods-service-list-with-type")
    public BaseResult<SearchLoadData<GoodsServiceListItem>> loadGoodsServiceListWithType(@RequestBody GoodsServiceTypeData data) {
        return resultHandler(data, userItem -> goodsServiceService.loadGoodsServiceListWithType(data));
    }

    /**
     * 加载不是任务包的物品、服务信息
     *
     * @param
     * @return
     * @author GuanKui
     * @date 2020/3/9  17:42
     */
    @ApiOperation(value = "加载不是任务包的物品、服务信息", notes = "加载不是任务包的物品、服务信息，包括id、名称、数量、价格信息")
    @PostMapping("/load-goods-service-list-no-package")
    public BaseResult<ArrayList<GoodsServiceChildListItem>> loadGoodsServiceListNoPackage() {
        return resultHandler(userItem -> goodsServiceService.loadGoodsServiceListNoPackage());
    }

    /**
     * 根据物品服务项目id，加载物品、服务基本信息
     *
     * @param data 主键
     * @return
     * @author GuanKui
     * @date 2020/3/10 8:54
     */
    @ApiOperation(value = "根据物品服务项目id，加载物品、服务基本信息", notes = "根据物品服务项目id，加载【service_item】表中指定的物品、服务基本信息")
    @PostMapping("/load-goods-service-with-id")
    public BaseResult<GoodsServiceLoadData> loadGoodsServiceWithId(@RequestBody IdData data) {
        return resultHandler(data, userItem -> goodsServiceService.loadGoodsServiceWithId(data));
    }

    /**
     * 保存物品、服务基本信息
     *
     * @param data 物品服务保存数据
     * @return
     * @author GuanKui
     * @date 2020/3/10 10:46
     */
    @ApiOperation(value = "保存物品、服务基本信息", notes = "保存物品服务基本信息到表【service_item】中")
    @PostMapping("/save-goods-service")
    public BaseResult saveGoodsService(@RequestBody GoodsServiceSaveData data) {
        return resultHandler(data, userItem -> goodsServiceService.saveGoodsService(userItem, data));
    }

    /**
     * 删除物品、服务基本信息
     *
     * @param data 主键和数据版本
     * @return
     * @author GuanKui
     * @date 2020/3/10 8:54
     */
    @ApiOperation(value = "删除物品、服务基本信息", notes = "从表【service_item】中删除物品服务信息")
    @PostMapping("/delete-goods-service-with-id")
    public BaseResult deleteGoodsServiceWithId(@RequestBody ArrayList<IdVersionData> data) {
        return resultHandler(userItem -> goodsServiceService.deleteGoodsServiceWithId(userItem, data));
    }

    /**
     * 加载数据库表中所有有效物品、服务信息
     *
     * @param
     * @return
     * @author GuanKui
     * @date 2020/3/17  10:38
     */
    @ApiOperation(value = "加载数据库表中所有有效物品、服务信息", notes = "加载所有的物品、服务信息，包括id、名称、数量、价格信息")
    @PostMapping("/load-goods-service-list")
    public BaseResult<ArrayList<GoodsServiceListItem>> loadGoodsServiceList() {
        return resultHandler(userItem -> goodsServiceService.loadGoodsServiceList());
    }
}
